Hi! I’m Zander
, I make web things
ZUI
A CSS-first UI library with design tokens, layered architecture, and optional React, Astro, Solid, Svelte & Vue components. No build step required.
➤ zui.zander.wtf
Otter
A self-hosted bookmark manager and media tracker built for people who value privacy and ownership.
➤ otter.zander.wtfAbout me
Product engineer with 18 years of experience, specialising in front-end and design systems - building products that work well for the people who use them.
Current
Dare
Staff Software Engineer and web team lead. I maintained and evolved Dare's core ETRM (Energy Trading and Risk Management) platform — a complex, data-intensive system — and built a new component library from the ground up, bringing visual and functional consistency across the product suite.
Previous
Fathom · Utopia Music · Babylon Health · Digital Futures · Heights · Curve · FairFX · Nimbletank · TMW Unlimited · Neverbland
For more details on my work experience, check out my CV →
Blog
Building site search with Astro and Cloudflare D1
Replacing Algolia on this very website with a self-owned, full-text search API built on Cloudflare D1 and SQLite FTS5, searchable from the site itself and from Raycast
text-wrap, overflow-wrap and word-break: which one do I actually want?
A practical guide to CSS's confusingly-similar text wrapping and breaking properties, and when to reach for each one
The Otter ecosystem
One bookmarking app, many faces — a tour of the web app, browser extensions, iOS share extension, Raycast extension, terminal UI, and desktop experiment that make up Otter.
The ZUI ecosystem
The tooling that has grown up around my CSS-first UI library — framework components, a VS Code extension, a Raycast extension, and a publishable Astro docs theme.
Zero: my project factory
How a single GitHub Actions workflow takes me from an idea on my phone to a scaffolded, deployed-ready project with a database, secrets, and Claude already building it.
Code Notes
TILs, snippets—my digital code garden
🔒 Locking scroll 🎭 Playwright Text wrapping & word breaking 💯 Intl.NumberFormat ⏳ Intl.RelativeTimeFormat
View all notes →